<?php

namespace app\common\model\marketing;

use think\Model;

class Advertisement extends Model
{
    // 数据库
    protected $name = 'fa_advertisement';
    
    // 自动写入时间戳
    protected $autoWriteTimestamp = true;
    protected $createTime = 'createtime';
    protected $updateTime = 'updatetime';

      // 广告位置
      protected $positions = [
        'detail' => '详情页',
        'list' => '列表页',
        'activity' => '活动页'
    ];

    // 类型数据
    protected $jumpTypes = [
        'page' => '小程序页面',
        'url' => '外部链接',
        'miniapp' => '其他小程序'
    ];

    // 追加属性
    protected $append = [
        'jump_type_text',
        'status_text',
        'position_text'  // 新增位置文本

    ];

    /**
     * 获取位置文本
     */
    public function getPositionTextAttr($value, $data)
    {
        return isset($this->positions[$data['position']]) ? $this->positions[$data['position']] : '未知';
    }
    
    public function getJumpTypeTextAttr($value, $data)
    {
        return isset($this->jumpTypes[$data['jump_type']]) ? $this->jumpTypes[$data['jump_type']] : '未知';
    }

    public function getStatusTextAttr($value, $data)
    {
        return $data['status'] ? '启用' : '禁用';
    }

    /**
     * 获取广告列表
     * @param array $where 查询条件
     * @param int $page 页码
     * @param int $limit 每页数量
     * @return array
     */
    public function getList($where = [], $page = 1, $limit = 10)
    {
        $total = $this->where($where)->count();
        $list = $this->where($where)
            ->page($page, $limit)
            ->order('weigh desc, id desc')
            ->select();

        return ['total' => $total, 'data' => $list];
    }

    
    /**
     * 获取指定位置的有效广告
     * @param string $position 广告位置
     * @return array
     */
    public function getPositionAds($position)
    {
        return $this->where('status', 1)
            ->where('position', $position)
            ->field('id,name,image,jump_type,jump_url,params')
            ->order('weigh desc, id desc')
            ->select();
    }

    /**
     * 添加广告
     * @param array $data 广告数据
     * @return bool
     */
    public function add($data)
    {
        // 处理参数JSON
        if (isset($data['params']) && is_array($data['params'])) {
            $data['params'] = json_encode($data['params'], JSON_UNESCAPED_UNICODE);
        }
        
        return $this->allowField(true)->save($data);
    }

    /**
     * 更新广告
     * @param array $data 广告数据
     * @return bool
     */
    public function edit($data)
    {
        // 处理参数JSON
        if (isset($data['params']) && is_array($data['params'])) {
            $data['params'] = json_encode($data['params'], JSON_UNESCAPED_UNICODE);
        }
        
        return $this->allowField(true)->save($data, ['id' => $data['id']]);
    }

    /**
     * 删除广告
     * @param int $id 广告ID
     * @return bool
     */
    public function remove($id)
    {
        return $this->where('id', $id)->delete();
    }

    /**
     * 更新状态
     * @param int $id 广告ID
     * @param int $status 状态值
     * @return bool
     */
    public function updateStatus($id, $status)
    {
        return $this->where('id', $id)->update(['status' => $status]);
    }

    /**
     * 获取有效的广告列表(前台使用)
     * @return array
     */
    public function getValidList()
    {
        return $this->where('status', 1)
            ->field('id,name,image,jump_type,jump_url,params')
            ->order('weigh desc, id desc')
            ->select();
    }
}
